/*
 * ActivityCoefficient.h
 *
 *  Created on: 23 May 2011
 *      Author: allan
 */

#ifndef ACTIVITYCOEFFICIENT_H_
#define ACTIVITYCOEFFICIENT_H_

// C++ includes
#include <string>
#include <vector>
using namespace std;

const double DebyeHuckelParameterA(double T, double P);

const double DebyeHuckelParameterB(double T, double P);

const double HKFParameterNaCl(double T, double P);

const double HKFParameterNapClm(double T, double P);

struct ParamsHKF
{
	// the ionic strength of the aqueous solution
	double I;
	
	// the total molality of the solutes in the aqueous solution
	double mT;
	
	// the stoichiometric molality of the ions in the aqueous solution
	vector<double> mTi;
	
	// the Debye-Huckel parameter A
	double A;

	// the Debye-Huckel parameter B
	double B;

	// the HKF paramer bNaCl
	double bNaCl;

	// the HKF paramer bNa+Cl-
	double bNapClm;
	
	// the effective electrostatic radii of the ions
	vector<double> effRadii;
	
	// the electrical charge of the ions
	vector<int> zOfIons;
};

const vector<double> EffectiveElectrostaticRadiiOfIons(const vector<string>& namesOfIons);

const double EffectiveElectrostaticRadiusOfIon(string namesOfIon);

const double ActivityCoefficientIdealModel();

const double ActivityCoefficientNeutralModelSetschenow(double I, double setschenow);

const double ActivityCoefficientIonicModelHKF(unsigned iIon, const ParamsHKF& params);

const double ActivityWaterModelHKF(const ParamsHKF& params);

#endif /* ACTIVITYCOEFFICIENT_H_ */
